               (*******************************************************************)
               (*              FERRARI HINGE-HOLE DRILL PROGRAM                   *)
               (*              AUTHUR: M. GOUWS                                   *)
               (*              DATE: 26 FEBRUARY 2008                             *)
               (*******************************************************************) 

M98PSTRTTIME.SUBL1
M48
[CLS]
[WINDOW ON]
[PRINT " PLEASE CHECK WASTEBOARD THICKNESS AND THEN PRESS START"]
[PRINT " CHANGE IF NOT CORRECT !!!!!!! "]
M00
SET WASTEBOARD = 6.959
[PRINT "PLEASE ENTER MATERIAL THICKNESS"]
[PRINT "MAKE SURE THE VALUE IS CORRECT!!"]
[INPUT THICKNESS]
SET ZSHIFT = WASTEBOARD + THICKNESS 

M80L1
[CLS]
[PRINT "ENTER DOOR LENGTH ";]
[INPUT LENGTH]
[PRINT "ENTER DOOR WIDTH ";]
[INPUT WIDTH]
IF [(LENGTH > 2750) | (WIDTH > 1830)] THEN M81L996
[PRINT "HINGE CENTER TO TOP? ";]
[INPUT TOP_HINGE]
[PRINT "HINGE CENTER TO BOTTOM? ";]
[INPUT BOTTOM_HINGE]
M80L2
[PRINT "HOW MANY HINGE HOLES? ";]
[INPUT AMOUNT_HOLES]
IF [(AMOUNT_HOLES < 2) | (AMOUNT_HOLES > 4)] THEN M81L997 
[PRINT "HOW MANY DOORS TO BE DRILLED? ";]
[INPUT AMOUNT]
[TOTAL_DOORS = AMOUNT]
[CLS]
M80L3
[PRINT "TO DRILL A LEFT HINGE DOOR SELECT 1 AND <ENTER> "]
[PRINT "TO DRILL A RIGHT HINGE DOOR SELECT 2 AND <ENTER> "]
[PRINT "E FOR EXIT"]        
[INPUT SELECT$]
IF [SELECT$ = "E"] THEN M02
IF [(VAL(SELECT$)<1) | (VAL(SELECT$) > 2)] THEN M81L998 
IF [(VAL(SELECT$)=1) & (AMOUNT_HOLES = 4)] THEN M81L8
IF [(VAL(SELECT$)=1) & (AMOUNT_HOLES < 4)] THEN M81L4
IF [(VAL(SELECT$)=2) & (AMOUNT_HOLES = 4)] THEN M81L8
IF [(VAL(SELECT$)=2) & (AMOUNT_HOLES < 4)] THEN M81L6

M80L8
[CLS]
[PRINT "YOU HAVE SELECTED A DOOR WITH 4 HINGE HOLES"]
[PRINT "TO EQUALIZE SELECT 'Q' AND <ENTER> "]
[PRINT "TO MANUALY ENTER VALUES FOR HINGE HOLE POSITIONS, SELECT 'M' AND <ENTER>"]
[INPUT INPUT$]
IF [(INPUT$ = "Q") & (VAL(SELECT$) = 1)] THEN M81L4
IF [(INPUT$ = "Q") & (VAL(SELECT$) = 2)] THEN M81L6
IF [INPUT$ = "M"] THEN M81L13
M81L995

M80L13
[CLS]
[PRINT "2ND HINGE DISTANCE FROM TOP OF THE DOOR ";]
[INPUT 2ND_HINGE]
[PRINT "3RD HINGE DISTANCE FROM TOP OF THE DOOR ";]
[INPUT 3RD_HINGE]
IF [(VAL(SELECT$) = 1) THEN M81L14
IF [(VAL(SELECT$) = 2) THEN M81L15

M80L4                          (LEFT HINGE DOOR)
[WINDOW OFF]
[CLS]
SET XSHIFT = LENGTH 
SET YSHIFT = WIDTH 
S5000
T7M3
G90
G902
G00 X[TOP_HINGE] Y[WIDTH - 23]
G00 Z10
M31
G01 Z-13.5 F1200
G00 Z10
G00 X[LENGTH - BOTTOM_HINGE] Y[WIDTH - 23]
G01 Z-13.5 F1200
G00 Z10
IF [AMOUNT_HOLES = 2] THEN M81L5
IF [AMOUNT_HOLES = 4] THEN M81L9
[CENTER_HINGE = LENGTH / 2]
G00 X[CENTER_HINGE] Y[WIDTH - 23]
G01 Z-13.5 F1200
G00 Z10

M80L5
S6000
T6M3
G90
G902
G00 X[TOP_HINGE - 22.5] Y[WIDTH - 32.5]
G00 Z10
M31
G01 Z-13 F1200
G00 Z10
G00 X[TOP_HINGE + 22.5] Y[WIDTH - 32.5]
G01 Z-13 F1200
G00 Z10
G00 X[LENGTH - BOTTOM_HINGE - 22.5] Y[WIDTH - 32.5]
G01 Z-13 F1200
G00 Z10
G00 X[LENGTH - BOTTOM_HINGE + 22.5] Y[WIDTH - 32.5]
G01 Z-13 F1200
G00 Z10
IF [AMOUNT_HOLES = 2] THEN M81L900
IF [AMOUNT_HOLES = 4] THEN M81L10
G00 X[CENTER_HINGE + 22.5] Y[WIDTH - 32.5]
G01 Z-13 F1200
G00 Z10
G00 X[CENTER_HINGE - 22.5] Y[WIDTH - 32.5]
G01 Z-13 F1200
G00 Z10
M81L900

M80L9
[EQUALIZE = ((LENGTH - TOP_HINGE - BOTTOM_HINGE) / 3)]
G00 X[LENGTH - BOTTOM_HINGE - EQUALIZE] Y[WIDTH - 23]
G01 Z-13.5 F1200
G00 Z10
G00 X[TOP_HINGE + EQUALIZE] Y[WIDTH - 23]
G01 Z-13.5 F1200
G00 Z10
M81L5

M80L10
G00 X[LENGTH - BOTTOM_HINGE - EQUALIZE + 22.5] Y[WIDTH - 32.5]
G01 Z-13 F1200
G00 Z10 
G00 X[LENGTH - BOTTOM_HINGE - EQUALIZE - 22.5] Y[WIDTH - 32.5]
G01 Z-13 F1200
G00 Z10
G00 X[TOP_HINGE + EQUALIZE + 22.5] Y[WIDTH - 32.5]
G01 Z-13 F1200
G00 Z10
G00 X[TOP_HINGE + EQUALIZE - 22.5] Y[WIDTH - 32.5]
G01 Z-13 F1200
G00 Z10
M81L900

M80L6                             (RIGHT HINGE DOOR)
[WINDOW OFF]
[CLS]
SET XSHIFT = LENGTH 
SET YSHIFT = WIDTH 
S5000
T7M3
G90
G902
G00 X[TOP_HINGE] Y23
G00 Z10
M31
G01 Z-13.5 F1200
G00 Z10
G00 X[LENGTH - BOTTOM_HINGE] Y23
G01 Z-13.5 F1200
G00 Z10
IF [AMOUNT_HOLES = 2] THEN M81L7
IF [AMOUNT_HOLES = 4] THEN M81L11
[CENTER_HINGE = LENGTH / 2]
G00 X[CENTER_HINGE] Y23
G01 Z-13.5 F1200
G00 Z10

M80L7
S6000
T6M3
G90
G902
G00 X[TOP_HINGE - 22.5] Y32.5
G00 Z10
M31
G01 Z-13 F1200
G00 Z10
G00 X[TOP_HINGE + 22.5] Y32.5
G01 Z-13 F1200
G00 Z10
G00 X[LENGTH - BOTTOM_HINGE - 22.5] Y32.5
G01 Z-13 F1200
G00 Z10
G00 X[LENGTH - BOTTOM_HINGE + 22.5] Y32.5
G01 Z-13 F1200
G00 Z10
IF [AMOUNT_HOLES = 2] THEN M81L900
IF [AMOUNT_HOLES = 4] THEN M81L12
G00 X[CENTER_HINGE + 22.5] Y32.5
G01 Z-13 F1200
G00 Z10
G00 X[CENTER_HINGE - 22.5] Y32.5
G01 Z-13 F1200
G00 Z10
M81L900

M80L11
[EQUALIZE = ((LENGTH - TOP_HINGE - BOTTOM_HINGE) / 3)]
G00 X[LENGTH - BOTTOM_HINGE - EQUALIZE] Y23
G01 Z-13.5 F1200
G00 Z10
G00 X[TOP_HINGE + EQUALIZE] Y23
G01 Z-13.5 F1200
G00 Z10
M81L7

M80L12
G00 X[LENGTH - BOTTOM_HINGE - EQUALIZE + 22.5] Y32.5
G01 Z-13 F1200
G00 Z10 
G00 X[LENGTH - BOTTOM_HINGE - EQUALIZE - 22.5] Y32.5
G01 Z-13 F1200
G00 Z10
G00 X[TOP_HINGE + EQUALIZE + 22.5] Y32.5
G01 Z-13 F1200
G00 Z10
G00 X[TOP_HINGE + EQUALIZE - 22.5] Y32.5
G01 Z-13 F1200
G00 Z10
M81L900

M80L900
[AMOUNT = AMOUNT - 1]
IF [AMOUNT = 0] THEN M81L999
T7
G90
[WINDOW ON]
[PRINT "LOAD ANOTHER DOOR"]
[PRINT "TOTAL NUMBER OF DOORS TO BE DRILLED: ";]
[PRINT TOTAL_DOORS]
[PRINT "DOORS STILL TO BE DRILLED: ";]
[PRINT AMOUNT]
[PRINT "PUSH START WHEN READY"]
M00
IF [(VAL(SELECT$)=1)] THEN M81L4
IF [(VAL(SELECT$)=2)] THEN M81L6 

                             (********ERRORS********)
M80L995
[PRINT "YOU HAVE ENTERED AN INVALID OPTION"]
[PRINT "VALID OPTIONS ARE "Q" FOR "EQUALIZE" OR "M" FOR MANUAL"]
[PRINT "PUSH START TO TRY AGAIN"]
M00
[CLS]
M81L8

M80L996
[CLS]
[PRINT "MAXIMUM LENGTH ALLOW IS 2750mm, PLEASE ENTER A SMALLER LENGTH"]
[PRINT "MAXIMUM WIDTH ALLOW IS 1830mm, PLEASE ENTER SMALLER WIDTH"]
[PRINT "PUSH START TO TRY AGAIN"]
M00
[CLS]
M81L1

M80L997
[CLS]
[PRINT "YOU MUST SELECT ATLEASE 2 HOLES OR NOT MORE THAN 4"]
[PRINT "PUSH START TO TRY AGAIN"]
M00
[CLS]
M81L2

M80L998
[CLS]
[PRINT "YOU HAVE ENTERED AN INVALID OPTION "]
[PRINT "VALID OPTIONS ARE 1 FOR LEFTH HINGE DOOR AND 2 FOR RIGHT HINGE DOORS"]
[PRINT "PUSH START TO TRY AGAIN"]
M00
[CLS]
M81L3

M80L999
M05
G990
G90
G00 Z0
G00 X0 Y0
M98PENDTIME.SUBL1
M02